package ar.com.test.logic.componentes;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import ar.com.logic.components.CoordenadasFijos;
import ar.com.logic.components.MatrizPosiciones;
import ar.com.logic.components.interfaces.IMatrizPosiciones;

public class MatrizPosicionesUT {

	private IMatrizPosiciones m;

	@Before
	public void setUp() {
		m = new MatrizPosiciones(true, 4);
	}

	@Test
	public void probarIniciar() {
		for (int i = 0; i <= 9; i++) {
			Assert.assertEquals(4, m.posicionesDisponiblesParaValor(i).size());
		}
		for (int i = 1; i <= 4; i++) {
			Assert.assertEquals(10, m.valoresDisponiblesParaPosicion(i).size());
		}

	}

	@Test
	public void descartarValorTest() {
		m.descartarValor(7);
		Assert.assertEquals(0, m.posicionesDisponiblesParaValor(7).size());

	}

	@Test
	public void descartarPosicionTest() {
		m.descartarPosicionParaValor(7, 1);
		Assert.assertEquals(9, m.valoresDisponiblesParaPosicion(1).size());
		Assert.assertEquals(false, m.valoresDisponiblesParaPosicion(1)
				.contains(7));
		Assert.assertEquals(false, m.posicionesDisponiblesParaValor(7)
				.contains(1));
		Assert.assertEquals(true,
				m.posicionesDisponiblesParaValor(7).contains(2));

	}

	@Test
	public void fijarValorParaPosicionTest() {
		m.fijarValorParaPosicion(7, 1);
		Assert.assertEquals(1, m.valoresDisponiblesParaPosicion(1).size());
		Assert.assertEquals(true,
				m.valoresDisponiblesParaPosicion(1).contains(7));
		Assert.assertEquals(true,
				m.posicionesDisponiblesParaValor(7).contains(1));
		Assert.assertEquals(1, m.posicionesDisponiblesParaValor(7).size());
		Assert.assertEquals(3, m.posicionesDisponiblesParaValor(2).size());

	}

	@Test
	public void obtenerDescartadosTest() {
		m.descartarValor(7);
		Assert.assertEquals(1, m.obtenerDescartados().size());
		Assert.assertEquals(new Integer(7), m.obtenerDescartados().get(0));

	}

	@Test
	public void obtenerFijosTest() {
		CoordenadasFijos result = new CoordenadasFijos();
		m.fijarValorParaPosicion(7, 1);
		result = m.obtenerFijos();
		Assert.assertEquals(new Integer(1), result.getCantidadFijos());
		Assert.assertEquals(new Integer(7), result.getFijoPosicion(1));
		Assert.assertEquals(new Integer(1), result.getPosicionValor(7));

	}


}
